var cli=require('mongodb').MongoClient;
var crypto=require('crypto');
var mock=require('../modules/mock');
var settings=require('../settings');

function User(user){
    var d=new Date();
    this.name=user.name;
    this.password=user.password;
    this.email=user.email;
    this.face=user.face || '/images/faces/'+Math.ceil(Math.random()*10)+'.jpg';
    this.regDate=user.regDate || d;
    this.regTime=user.regTime || mock.dateFormat(d,'all',true);
    this.postCnt=user.postCnt || 0;
}

module.exports=User;

User.prototype.toJSON= function () {
    return {
        name:this.name,
        email:this.email,
        regTime:this.regTime
    }
};

User.prototype.save= function (cb) {
    var user=this;
    cli.connect(settings.dbUrl,function (err, db) {
        if(err)return db.close(),cb(err);

        db.collection('users', function (err, collection) {
            if(err)return db.close(),cb(err);

            user.password=crypto.createHash('md5').update(user.password).digest('hex');
            collection.insert(user,{safe:true}, function (err) {
                db.close();
                if(err)return cb(err);
                cb(null);
            });
        });
    });
};

User.get= function (name,cb) {
    cli.connect(settings.dbUrl,function (err, db) {
        if(err)return db.close(),cb(err);

        db.collection('users', function (err, collection) {
            if(err)return db.close(),cb(err);

            collection.findOne({name:name}, function (err, doc) {
                db.close();
                if(err)return cb(err);
                cb(null,doc);
            });
        });
    });
};

User.getAll = function (cb) {
    cli.connect(settings.dbUrl,function (err, db) {
        if(err)return db.close(),cb(err);

        db.collection('users', function (err, collection) {
            if(err)return db.close(),cb(err);

            collection.find({}).toArray(function (err, docs) {
                db.close();
                if(err)return cb(err);
                cb(null,docs)
            });
        });
    });
};
